package bean;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

import org.hibernate.annotations.Cascade;

import bean.vo.ItemListaPreciosVO;

@Entity 
@Table( name = "items_lista_de_precio" )
public class ItemListaPrecios extends EntidadPersistente{
	@ManyToOne( cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH} )
	@Cascade( org.hibernate.annotations.CascadeType.SAVE_UPDATE)
	private Producto producto;
	private Float precio;
	private Integer cantidadMinima;
	@ManyToOne
	private ListaPrecios listaPrecio;
	
	public ItemListaPrecios () {}
	
	public ItemListaPrecios (ListaPrecios listaPrecio, Producto producto, float precio) {
		this.listaPrecio = listaPrecio;
		this.producto = producto;
		this.precio = precio;
	}
	
	public ItemListaPreciosVO getVO() {
		ItemListaPreciosVO vo = new ItemListaPreciosVO();
		vo.setCantidadMinima(cantidadMinima);
		vo.setPrecio(precio);
		vo.setProducto(producto.getVO());
		vo.setNombreProveedor(listaPrecio.getProveedor().getRazonSocial());
		vo.setNroLista(listaPrecio.getNumeroLista());
		
		return vo;
	}
	
	public Producto getProducto() {
		return producto;
	}
	
	public void setProducto(Producto producto) {
		this.producto = producto;
	}
	
	public Float getPrecio() {
		return precio;
	}
	
	public void setPrecio(Float precio) {
		this.precio = precio;
	}
	
	public Integer getCantidadMinima() {
		return cantidadMinima;
	}
	
	public void setCantidadMinima(Integer cantidadMinima) {
		this.cantidadMinima = cantidadMinima;
	}

	public ListaPrecios getListaPrecio() {
		return listaPrecio;
	}

	public void setListaPrecio(ListaPrecios listaPrecio) {
		this.listaPrecio = listaPrecio;
	}
	
	@Override
	public int hashCode() {
		final int primo = 31;
		int result = 1;
		result = primo * (result + (producto == null ? 0 : producto.hashCode()) + 
				(listaPrecio == null ? 0 : listaPrecio.hashCode()));
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj) return true;	
		if ((obj == null) || (!(obj instanceof ItemListaPrecios))) {
			return false;
		}
		ItemListaPrecios otro = (ItemListaPrecios) obj;
		boolean mismoProducto = (producto!=null && otro.producto != null ? (producto.equals(otro.producto)) : false);
		boolean mismaLista = (listaPrecio!=null && otro.listaPrecio != null ? (listaPrecio.equals(otro.listaPrecio)) : false);
		return mismoProducto && mismaLista;
	}
}
